package com.ys.p1.doubleloop;

/**
 * @author CodeYang
 * @Description 打印菱形:
 * *
 * ***
 * *****
 * *******
 * *****
 * ***
 * *
 * @Date 2020/12/8 9:33
 */
public class DoubleLoopTest01 {
    public static void main(String[] args) {
        printf02();
        printf01();
    }

    /**
     * 打印空心菱形:
     * 规律与实心菱形一样:
     * 实现：打印星星的时候，只打印每一行开始和结束的星星，其余位置输出空格即可。
     */
    private static void printf02() {
        // 定义变量接收 固定长度;为奇数行
        int len = 7;
        // 打印上半部分函数
        int subLen = len / 2 + 1;
        //  上半部分:
        // i 空格  星星 规律
        //   i sublen -i  2*i+1
        for (int i = 0; i < subLen; i++) {

            for (int j = 0; j < subLen - 1 - i; j++) {
                System.out.print(" ");
            }
            for (int j = 0; j < 2 * i + 1; j++) {
                // 开始和结束  开始是j=0 结束 j最多只能渠道 2*i  ----+1取不到
                if (j == 0 || j == 2 * i) {
                    System.out.print("*");
                } else {
                    System.out.print(" ");
                }
            }
            System.out.println();
        }
        int lowLen = len / 2;
        // 外侧循环控制行数
        for (int i = 0; i < lowLen; i++) {
            // 内侧循环打印空格
            for (int j = 0; j < i + 1; j++) {
                System.out.print(" ");
            }
            // 内侧循环打印星星
            for (int j = 0; j < 2 * (lowLen - 1 - i) + 1; j++) {
                if (j == 0 || j == 2 * (lowLen - 1 - i)) {
                    System.out.print("*");
                } else {
                    System.out.print(" ");
                }
            }
            System.out.println();
        }
    }


    /**
     * 打印实心菱形
     */
    private static void printf01() {
        // 定义变量接收 固定长度;为奇数行
        int len = 7;
        // 打印上半部分函数
        int subLen = len / 2 + 1;
        //  上半部分:
        // i 空格  星星 规律
        //   i sublen -i  2*i+1
        for (int i = 0; i < subLen; i++) {

            for (int j = 0; j < subLen - 1 - i; j++) {
                System.out.print(" ");
            }
            for (int j = 0; j < 2 * i + 1; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
        // 打印下半部分  上3 下4
        // i        空格       星星

        // *******  ----不是下三角的
        //  *****
        //   ***
        //    *
        // 0        1         5
        // 1        2         3
        // 2        3         1
        //-----------------------------
        // i        i+1      2*(lowLen-1-i)+1
        int lowLen = len / 2;
        // 外侧循环控制行数
        for (int i = 0; i < lowLen; i++) {
            // 内侧循环打印空格
            for (int j = 0; j < i + 1; j++) {
                System.out.print(" ");
            }
            // 内侧循环打印星星
            for (int j = 0; j < 2 * (lowLen - 1 - i) + 1; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }


}
